﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using proyEspacio.baseDato;

namespace proyEspacio.logicaNegocio
{
    public static class admSistPlaneta
    {
        /// <summary>
        /// Metodo para saber si existe un sistema planetario en la base de datos
        /// </summary>
        /// <param name="busqueda">parametro de busqueda</param>
        /// <returns></returns>
        public static bool existeSistPlaneta(string busqueda)
        {
            espacioEntities bd = new espacioEntities();
            return bd.SistemaPlanetario.Any(g => g.Nombre == busqueda);
        }
       /// <summary>
        /// Metodo que permite ingresar un nuevo sistema planetario a la base de datos
       /// </summary>
       /// <param name="entrada">Nombre sistema planetario</param>
       /// <param name="idGalaxia">Identificador de galaxia</param>
       /// <returns></returns>
        public static string ingresaSistplaneta(string entrada, int idGalaxia)
        {
            var existe = existeSistPlaneta(entrada);
            if (existe)
            {
                return "";
            }
            else
            {
                espacioEntities bd = new espacioEntities();
                SistemaPlanetario ingreso = new SistemaPlanetario
                {
                    Nombre = entrada,
                    Id_galaxia= idGalaxia
                };
                bd.SistemaPlanetario.Add(ingreso);
                bd.SaveChanges();
                return "Nuevo sistema planetario ingresado";
            }
        }
        /// <summary>
        /// Busca todos los sistemas planetarios pertenecientes a una galaxia
        /// </summary>
        /// <param name="sistemas">Lista de sistemas ya encontrados</param>
        /// <param name="idGalaxia">Identificador de galaxia</param>
        /// <returns></returns>
        public static SistemaPlanetario buscaSistPlaneta(List<string> sistemas, int idGalaxia)
        {
            espacioEntities bd = new espacioEntities();
            return bd.SistemaPlanetario.FirstOrDefault(s => s.Id_galaxia == idGalaxia & !sistemas.Contains(s.Nombre));
        }
        /// <summary>
        /// Busca un planeta en especifico
        /// </summary>
        /// <param name="busqueda">nombre de planeta</param>
        /// <returns></returns>
        public static SistemaPlanetario buscaSistema(string busqueda)
        {
            espacioEntities bd = new espacioEntities();
            return bd.SistemaPlanetario.FirstOrDefault(p => p.Nombre==busqueda);
        }
        /// <summary>
        /// Elimina un Sistema planetario de la base de datos
        /// </summary>
        /// <param name="sistPlaneta">sitema planetario a eliminar</param>
        /// <returns>un mensaje</returns>
        public static string eliminaSistPlaneta(string sistPlaneta)
        {
            espacioEntities bd = new espacioEntities();
            SistemaPlanetario eliminar = bd.SistemaPlanetario.FirstOrDefault(s => s.Nombre == sistPlaneta);
            admPlaneta.eliminaPlanetas(eliminar.Id_sistema);
            bd.SistemaPlanetario.Remove(eliminar);
            bd.SaveChanges();
            return "Sistema planetario eliminado";
        }
        /// <summary>
        /// Elimina un grupo de sistemas planetarios que sean de la misma galaxia
        /// </summary>
        /// <param name="idGalaxia">Identificador de galaxia</param>
        /// <returns></returns>
        public static string eliminaSistPlanetas(int idGalaxia)
        {
            espacioEntities bd = new espacioEntities();
            SistemaPlanetario eliminar = null;
            do
            {
                eliminar = bd.SistemaPlanetario.FirstOrDefault(s => s.Id_galaxia == idGalaxia);
                admPlaneta.eliminaPlanetas(eliminar.Id_sistema);
                bd.SistemaPlanetario.Remove(eliminar);
                bd.SaveChanges();
            } while (eliminar != null);
            return "Sistemas planetarios eliminados";
        }
        /// <summary>
        /// Permite editar el nombre de un sistema planetario
        /// </summary>
        /// <param name="idSistPlaneta">Identificador de sistema planetario</param>
        /// <param name="nombre">Nombre nuevo del sistema planetario</param>
        /// <returns>un mensaje</returns>
        public static string editaSistPlaneta(int idSistPlaneta, string nombre)
        {
            espacioEntities bd = new espacioEntities();
            SistemaPlanetario editar = bd.SistemaPlanetario.Find(idSistPlaneta);
            editar.Nombre = nombre;
            bd.SaveChanges();
            return "Datos actualizados";
        }
    }
}
